home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-06-22 | 3.3 KB | 197 lines | [TEXT/BROW] |
- // DynamicHeap.h
- // Created by Bill Hubauer on Thu, May 25, 1995 @ 8:00 AM.
-
- #ifndef __HeapObjects__
- #define __HeapObjects__
-
-
- #ifndef _HEAPS_
- #include "Heaps.h"
- #endif
-
- #ifndef __ObjectQueue__
- #include "ObjectQueue.h"
- #endif
-
- class CHeap
- {
- public:
- CHeap() {}
- virtual ~CHeap() {}
-
- Ptr Allocate(Size size);
- void Free(Ptr block);
-
- virtual Boolean HeapOK() = 0;
- virtual Boolean BlockInHeapQ(Ptr block) = 0;
-
- virtual Size FreeSpace() = 0;
-
- virtual Size BlockSize(Ptr block) = 0;
-
- virtual Size GetUsedSize() = 0;
-
- protected:
- virtual Ptr GetBlock(Size size) = 0;
- virtual void FreeBlock(Ptr block) = 0;
-
- virtual Boolean AllocateFailed(Size sizeNeeded) {return false;}
- };
-
-
-
-
- class CMacHeap : public CHeap
- {
- public:
- CMacHeap(THz zone);
- CMacHeap(); // cur zone
- virtual ~CMacHeap();
-
- virtual Boolean HeapOK() {return true;}
- virtual Boolean BlockInHeapQ(Ptr block) {return true;}
-
- virtual Size FreeSpace();
- virtual Size BlockSize(Ptr block) {return GetPtrSize(block); }
-
- virtual Size GetUsedSize();
-
-
- protected:
- virtual Ptr GetBlock(Size size);
- virtual void FreeBlock(Ptr block);
-
- THz _zone;
- UInt32 _sizeUsed; // my size used
-
- };
-
-
-
-
- class CStaticHeap : public CHeap
- {
- public:
- CStaticHeap(CHeap& heapSource,Size theSize);
- CStaticHeap(Ptr heapArea,Size theSize);
- virtual ~CStaticHeap();
-
- virtual Boolean HeapOK() {return _sHeap != NULL;}
-
- virtual Size FreeSpace();
- virtual Boolean BlockInHeapQ(Ptr block);
-
- virtual Size BlockSize(Ptr block) {return SHeap::BlockSize(block); }
-
- virtual Size GetUsedSize();
-
- protected:
- virtual Ptr GetBlock(Size size);
- virtual void FreeBlock(Ptr block);
-
- void Init(Ptr heapArea,Size theSize);
-
- Ptr _heapArea;
- Heap _sHeap;
- CHeap* _heapSource;
-
- Ptr _heapStart;
- Ptr _heapEnd;
- };
-
-
-
-
-
-
- class CDynamicHeap : public CHeap
- {
- public:
- CDynamicHeap(CHeap& heapSource,UInt32 initSize,UInt32 growSize);
- virtual ~CDynamicHeap();
-
- virtual Boolean HeapOK() {return _ok;}
- virtual Boolean BlockInHeapQ(Ptr block);
-
- virtual Size FreeSpace();
-
- virtual Size BlockSize(Ptr block);
-
- void CheckReservesMT();
-
- virtual Size GetUsedSize();
-
-
- protected:
- virtual Boolean AllocateFailed(Size sizeNeeded);
- virtual Ptr GetBlock(Size size);
- virtual void FreeBlock(Ptr block);
-
- Ptr GetBlockFromList(Size size);
- CStaticHeap* LocateHeapForBlock(Ptr block);
-
- UInt32 _initSize;
- UInt32 _growSize;
-
- CObjectQueue _heapList;
- CStaticHeap* _reserve;
- Boolean _ok;
-
- CHeap& _heapSource;
-
-
- // for debugging
- UInt32 _hiHeapMark;
-
- };
-
-
- class CManagedDynamicHeap;
-
- class CHeapManager
- {
- friend class CManagedDynamicHeap;
- public:
- CHeapManager();
- virtual ~CHeapManager();
-
- void CheckReservesMT();
-
- CDynamicHeap* MakeDynamicHeapMT(CHeap& heapSource,UInt32 initialSize,UInt32 growSize);
-
- protected:
-
-
-
-
- void AddHeap(CManagedDynamicHeap* heap);
- void RemoveHeap(CManagedDynamicHeap* heap);
-
-
- CObjectQueue _heaps;
- };
-
-
-
-
- class CManagedDynamicHeap:public CDynamicHeap,public MQueueElem
- {
- friend class CHeapManager;
-
- public:
- ~CManagedDynamicHeap() {_manager->RemoveHeap((CManagedDynamicHeap*)this);}
-
- protected:
- CManagedDynamicHeap(CHeap& heapSource,UInt32 initialSize,UInt32 growSize,CHeapManager* manager)
- :CDynamicHeap(heapSource,initialSize,growSize),_manager(manager) {manager->AddHeap(this);}
-
-
- CHeapManager* _manager;
-
- };
-
-
-
-
- #endif
-